'''

模块

内置模块
第三方模块
自定义模块

如何自定义模块

一个文件就是一个模块吗？
不是的，一个文件中可以定义多个函数，类，变量
把这些函数，类，变量放到一个文件中，就可以称之为一个模块
模块就是一个Python文件，以.py结尾，包含了Python对象定义和Python语句
模块能定义函数，类和变量，模块也能包含可执行的代码
模块的分类
内置模块
第三方模块
自定义模块
模块的导入
import 模块名
from 模块名 import 功能名
from 模块名 import *
import 模块名 as 别名
from 模块名 import 功能名 as 别名


__all__是什么？
作用:如果一个模块文件中有__all__变量，当使用from xxx import *导入时，只能导入这个列表中的元素
语法:__all__ = [“test”]


__name__是什么？
作用:测试当前模块，用于测试模块的代码
__name__属性可以自动根据执行方式产生不同值
如果是当前模块，__name__是__main__
如果是被其他文件导入，__name__是模块名


__all__ = [“test”]
__name__属性
作用
测试当前模块，用于测试模块的代码
__name__属性可以自动根据执行方式产生不同值
如果是当前模块，__name__是__main__
如果是被其他文件导入，__name__是模块名
模块的搜索路径和存储
当我们导入一个模块，Python解析器对模块位置的搜索顺序是：
当前目录
如果不在当前目录，Python则搜索在shell变量PYTHONPATH下的每个目录。
如果都找不到，Python会察看默认路径。UNIX下，默认路径一般为/usr/local/lib/python/
模块搜索路径存储在system模块的sys.path变量中。变量里包含当前目录，PYTHONPATH和由安装过程决定的默认目录。
'''
import sys
print(sys.path)

'''
    
模块的使用
import 模块名
from 模块名 import 功能名
from 模块名 import *
import 模块名 as 别名
from 模块名 import 功能名 as 别名
__all__ = [“test”]
__name__属性
作用
测试当前模块，用于测试模块的代码
__name__属性可以自动根据执行方式产生不同值
如果是当前模块，__name__是__main__
如果是被其他文件导入，__name__是模块名
模块的搜索路径和存储
当我们导入一个模块，Python解析器对模块位置的搜索顺序是：
当前目录
如果不在当前目录，Python则搜索在shell变量PYTHONPATH下的每个目录。
如果都找不到，Python会察看默认路径。UNIX下，默认路径一般为/usr/local/lib/python/
模块搜索路径存储在system模块的sys.path变量中。变量里包含当前目录，PYTHONPATH和由安装过程决定的默认目录。    

'''

import sys
print(sys.path)
print(sys.modules)
print(sys.builtin_module_names)
print(sys.executable)
print(sys.prefix)

